package com.itzhoun;

/**
 * @author 周楠
 * @Date 2023/01/12/上午 10:42
 */
public class PizzaStore1 {

    public static void main(String[] args) {
        BeiJinFactory beiJinFactory = new BeiJinFactory();
        beiJinFactory.createPizza("cheese");
        beiJinFactory.createCoffee();

        ShangHaiFactory shangHaiFactory = new ShangHaiFactory();
        shangHaiFactory.createPizza("cheese");
        shangHaiFactory.createEgg();


    }


    /**
     * 抽象工厂的几组定义：
     * 1、抽象工厂： 定义了一个接口，这个方法有一组方法用来生产产品，所有的工厂类都必须实现该接口
     * 2、具体工厂：不同的产品族。要生产该该产品，只需要实现该其中一个工厂进行获取，完全不需要实例化任何产品对象
     * 3、抽象产品，每个一个具体工厂都能生产产品
     * 4、具体产品
     *
     * 以上可以看出 BasePizzaFactory 是个抽象工厂，BeiJinFactory是具体工厂
     *
     * 总之：
     * 简单工厂 ： 用来生产同一等级结构中的任意产品。（不支持拓展增加产品）
     *
     * 工厂方法 ：用来生产同一等级结构中的固定产品。（支持拓展增加产品）
     *
     * 抽象工厂 ：用来生产不同产品族的全部产品。（支持拓展增加产品；支持增加产品族）
     *
     * 简单工厂模式就是建立一个实例化对象的类，在该类中对多个对象实例化。
     * 工厂方法模式是定义了一个创建对象的抽象方法，由子类决定要实例化的类。这样做的好处是再有新的类型的对象需要实例化只要增加子类即可。
     * 抽象工厂模式定义了一个接口用于创建对象族，而无需明确指定具体类。
     * 抽象工厂也是把对象的实例化交给了子类，即支持拓展。同时提供给客户端接口，避免了用户直接操作子类工厂。
     *
     */
}
